//
//  RJNetwoking.h
//  RJStoreApp
//
//  Created by ZNGOO on 16/6/21.
//  Copyright © 2016年 WRJ. All rights reserved.
//

#import <Foundation/Foundation.h>

typedef void (^_Nullable Success)(id _Null_unspecified responseObject);// 成功Block
typedef void (^ _Nullable Failure)(NSError * _Nonnull error); // 失败Blcok
typedef void (^ _Nullable Progress)(NSProgress * _Nullable progress); // 上传或者下载进度Block
typedef NSURL * _Nullable (^ _Nullable Destination)(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response); //返回URL的Block
typedef void (^ _Nullable DownLoadSuccess)(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath); // 下载成功的Blcok

typedef void (^ _Nullable Unknown)();          // 未知网络状态的Block
typedef void (^ _Nullable Reachable)();        // 无网络的Blcok
typedef void (^ _Nullable ReachableViaWWAN)(); // 蜂窝数据网的Block
typedef void (^ _Nullable ReachableViaWiFi)(); // WiFi网络的Block


@interface RJNetwoking : NSObject
/**
 *  网络监测(在什么网络状态)
 *
 *  @param unknown          未知网络
 *  @param reachable        无网络
 *  @param reachableViaWWAN 蜂窝数据网
 *  @param reachableViaWiFi WiFi网络
 */
+ (void)networkStatusUnknown:(Unknown)unknown
                   reachable:(Reachable)reachable
            reachableViaWWAN:(ReachableViaWWAN)reachableViaWWAN
            reachableViaWiFi:(ReachableViaWiFi)reachableViaWiFi;


/**
 *  封装的GET请求
 *
 *  @param URLString  请求的链接
 *  @param parameters 请求的参数
 *  @param success    请求成功回调
 *  @param failure    请求失败回调
 */
+ (void)GET:(NSString * _Null_unspecified)URLString
 parameters:(NSDictionary *_Null_unspecified)parameters
    success:(Success)success
    failure:(Failure)failure;


/**
 *  封装的POST请求
 *
 *  @param URLString  请求的链接
 *  @param parameters 请求的参数
 *  @param success    请求成功回调
 *  @param failure    请求失败回调
 */
+ (void)POST:(NSString * _Null_unspecified)URLString
  parameters:(NSDictionary *_Null_unspecified)parameters
     success:(Success)success
     failure:(Failure)failure;
/**
 *  封装的POST请求
 *
 *  @param URLString 请求的链接
 *  @param body      请求的Body参数
 *  @param success   请求成功回调
 *  @param failure   请求失败回调
 */
+ (void)POST:(NSString * _Null_unspecified)URLString
        body:(NSDictionary * _Null_unspecified)body
     success:(Success)success
     failure:(Failure)failure;

/**
 *  封装POST图片上传(多张图片) // 可扩展成多个别的数据上传如:mp3等
 *
 *  @param URLString  请求的链接
 *  @param parameters 请求的参数
 *  @param picArray   存放图片模型(HDPicModle)的数组
 *  @param progress   进度的回调
 *  @param success    发送成功的回调
 *  @param failure    发送失败的回调
 */
+ (void)POST:(NSString * _Null_unspecified)URLString
  parameters:(NSDictionary * _Null_unspecified)parameters
 andPicArray:(NSArray * _Null_unspecified)picArray
     picSize:(NSUInteger)picSize
    progress:(Progress)progress
     success:(Success)success
     failure:(Failure)failure;

/**
 *  封装POST图片上传(单张图片) // 可扩展成单个别的数据上传如:mp3等
 *
 *  @param URLString  请求的链接
 *  @param parameters 请求的参数
 *  @param picModle   上传的图片模型
 *  @param progress   进度的回调
 *  @param success    发送成功的回调
 *  @param failure    发送失败的回调
 */
+ (void)POST:(NSString * _Null_unspecified)URLString
  parameters:(NSDictionary * _Null_unspecified)parameters
      andPic:(NSData * _Null_unspecified)picData
     picSize:(NSUInteger)picSize
    progress:(Progress)progress
     success:(Success)success
     failure:(Failure)failure;

/**
 *  封装的下载文件
 *
 *  @param urlString 文件下载地址
 *  @param fileName  文件保存在Caches下的指定文件名下
 *  @param progress  下载进度
 *  @param success   下载完成的回调（返回文件路径）
 */
+ (void)downloadFileWithUrl:(NSString * _Null_unspecified)urlString
   saveCachesPathToFileName:(NSString * _Null_unspecified)fileName
                   progress:(Progress)progress
                    success:(Success)success;
@end
